Snowflake ML FunctionsのContribution Explorerを試してみた

Snowflake ML FunctionsのContribution Explorerを試してみた

Contribution Explorerの概要と、出力で確認するとよい項目についてご紹介します。
Clock Icon2024.07.16

データ事業本部 機械学習チームの鈴木です。

SnowflakeのML Functionsの1機能として、Contribution Explorerがパブリックプレビューで提供されています。

Snowflakeに格納したデータに対する要因分析の実施方法に関心があり、ブリックプレビュー版ではありますが、今回試してみたのでポイントや参考になった資料をご紹介します。

ML Functionsとは

Snowflake AI & MLの1機能で、機械学習による分析や推論を担うものとなっています。

Snowflakeにおける機械学習の機能としては、ほかにSnowpark MLがありますが、あちらはPythonスクリプトを記述して従来通りモデルを開発していくイメージであるのに対して、ML FunctionsはSQLを使って誰でも簡単に機械学習のモデル開発・利用ができる代わりに、ある程度用途や使い方が決まっているものになります。

現状は以下の機能があります。

  • 異常検知
  • 時系列予測
  • 分類(パブリックプレビュー)
  • 要因分析(パブリックプレビュー)

今回は要因分析について取り上げます。

使ってみる

1.クエリの実行

ドキュメントに簡単な使用例があるので、誰でも簡単に始めることができます。

Exampleの記載にしたがって、input_tableテーブルを作成し、データを格納しておきました。

続いて、分析実行用のクエリを実行しました。

-- https://docs.snowflake.com/en/user-guide/ml-functions/contribution-explorer
-- より2024/07/13に引用

WITH input AS (
  SELECT
    {
      'country': input_table.dim_country,
      'vertical': input_table.dim_vertical
    }
    AS categorical_dimensions,
    {
         'length_of_vertical': length(input_table.dim_country)
    }
    AS continuous_dimensions,
    input_table.metric,
    IFF(ds BETWEEN '2020-08-01' AND '2020-08-20', TRUE, FALSE) AS label
  FROM input_table
  WHERE
    (ds BETWEEN '2020-05-01' AND '2020-05-20') OR
    (ds BETWEEN '2020-08-01' AND '2020-08-20')
)
SELECT res.* from input, TABLE(
  SNOWFLAKE.ML.TOP_INSIGHTS(
    input.categorical_dimensions,
    input.continuous_dimensions,
    CAST(input.metric AS FLOAT),
    input.label
  )
  OVER (PARTITION BY 0)
) res ORDER BY res.surprise DESC;

分析にはSNOWFLAKE.ML.TOP_INSIGHTS関数を使います。

ガイドにも概要の記載がありますが、より詳細にはリファレンスを参照すると良いです。

実行すると、以下のように結果を取得できます。結果はカラム数が多いので関心があったカラムに絞っています。

スクリーンショット 2024-07-13 18.18.10

2.分析結果の確認

出力のうち、以下の観点を確認するとよさそうでした。

  • contributor: 分析対象のセグメント
  • metric_test: テスト対象期間の評価対象の時系列データ
  • expected_metric_test: 非テスト対象期間の入力から期待される、評価対象の時系列データ
  • surprise: metric_testとexpected_metric_testの差(直接的な記載がガイドになかったので結果より確認)
  • relative_change: metric_testとexpected_metric_testの比(直接的な記載がガイドになかったので結果より確認)

分析例は、直近だとYoutubeやMediumの記事に分析例が例示されているのでご紹介します。

https://youtu.be/V5kKYbVeSVc?si=5AKiwTLpcN0-ZZjd

例えば、あるcontributorの値について、relative_changeが1より大きい場合は、
過去の傾向から期待される値よりも、テスト期間の実際の値が大きいため、そのセグメントは値の大きさにより影響していると考えられます。1より小さい場合は逆に小さくなるように寄与していると考えられます。

先に言及した資料ではrelative_changeによる評価をしていましたが、surpriseとの違いとしては、比を使うか差を使うかであり、実際の値を見つつ場合に応じて使い分ける形になるかなと思いました。

最後に

ML Functionsの1機能であるContribution Explorerのご紹介でした。

現在パブリックプレビューであるため、一般提供開始が楽しみな機能ですね。

Share this article

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.